// src/utils/http.js

const HTTP = {
  // 基础URL（开发环境/生产环境可配置）
  baseURL: 'http://192.168.1.109:9007', // 替换为你的接口域名

  // 默认超时时间
  timeout: 10000,

  // 请求头默认配置
  header: {
    'content-type': 'application/json',
  },

  // 是否携带 token（根据业务决定是否开启）
  withToken: true,
};

// 请求拦截器（可选）
function requestInterceptor(url, options) {
  // 示例：添加 token 到 header
  const token = uni.getStorageSync('token');
  if (token && options.header && HTTP.withToken) {
    options.header['Authorization'] = token;
  }

  console.log('[Request] 拦截器 - 发起请求:', url, options);
  return options;
}

// 响应拦截器（可选）
function responseInterceptor(response) {
  console.log('[Response] 拦截器 - 接收到响应:', response);

  const { statusCode, data } = response;

  // 处理 HTTP 状态码
  if (statusCode >= 200 && statusCode < 300) {
    return data;
  } else {
    uni.$u.toast(`HTTP错误：${statusCode}`);
    throw new Error(`HTTP错误：${statusCode}`);
  }
}

// 错误处理函数
function handleError(error) {
  console.error('[Error] 请求出错:', error);
  uni.$u.toast('网络异常，请稍后重试');
  return Promise.reject(error);
}

// ✨ uni.request 封装
function request(url, options = {}) {
  const fullURL = HTTP.baseURL + url;

  // 处理 params（查询参数）
  let finalURL = fullURL;
  if (options.params) {
    const queryString = new URLSearchParams(options.params).toString();
    finalURL += '?' + queryString;
  }

  const requestOptions = requestInterceptor(finalURL, {
    ...{
      url: finalURL,
      success: () => {},
      fail: () => {},
      complete: () => {},
      method: 'GET',
      header: {},
      ...options,
      header: {
        ...HTTP.header,
        ...(options.header || {}),
      },
    },
  });

  return new Promise((resolve, reject) => {
    uni.request({
      url: requestOptions.url,
      method: requestOptions.method || 'GET',
      data: requestOptions.data || {}, // POST 数据放这里
      header: requestOptions.header,
      success: (res) => {
        try {
          const result = responseInterceptor(res);
          resolve(result);
        } catch (err) {
          reject(err);
        }
      },
      fail: (err) => {
        handleError(err);
        reject(err);
      },
      complete: () => {
        if (requestOptions.complete) requestOptions.complete();
      },
    });
  });
}

// 封装 GET 请求
function get(url, params = {}, options = {}) {
  return request(url, {
    method: 'GET',
    ...options,
    params, // 
  });
}

// 封装 POST 请求
function post(url, data = {}, options = {}) {
  return request(url, {
    method: 'POST',
    data,
    ...options,
  });
}

// 封装 PUT 请求（用于更新资源）
function put(url, data = {}, options = {}) {
  return request(url, {
    method: 'PUT',
    data,
    ...options,
  });
}

// 封装 DELETE 请求（用于删除资源）
function del(url, params = {}, options = {}) {
  return request(url, {
    method: 'DELETE',
    data: params,
    ...options,
  });
}

export default {
  get,
  post,
  put,
  delete: del
};